/**
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度
 */

/**
 * 思路:
 * 1、新建一个set，创建两个指针
 * 2、刚开始时，两个指针都指向第一个元素
 * 3、移动i，set里面没有，加入s[i]，一直移到到set里面有，移除j，然后j++，在判断set里面有没有s[i]，如果还有移除j，然后j++，没有了则加入s[i]
 * 4、重复第三步
*/

var lengthOfLongestSubstring = function (s) {
  let set = new Set();
  let i = 0,
    j = 0,
    maxLength = 0;
  if (s.length === 0) {
    return 0;
  }

  for (i; i < s.length; i++) {
    // 判断set中有没有s[i]
    if (!set.has(s[i])) {
      // 添加s[i]
      set.add(s[i]);
      // 取最大值
      maxLength = Math.max(maxLength, set.size);
    } else {
      while (set.has(s[i])) {
        // 删除s[j]
        set.delete(s[j]);
        j++;
      }
      set.add(s[i]);
    }
  }

  return maxLength;
};
